/**  
 * Copyright © 2017武汉思恒达科技有限公司. All rights reserved.
 * @Title: VersionFactory.java
 * @Prject: Ads
 * @Package: com.loongtek.onyx.corgi.web.adssystem.datacenter.utils
 * @author: int_java_se@163.com
 * @date: 2017年2月9日 下午2:14:27
 */
package com.thinkingstar.iads.common.utils;

/** 
 * @ClassName: VersionFactory <br/> 
 * @Description: 版本工厂
 * @date: 2017年2月9日 下午2:14:27 <br/> 
 * @author int_java_se@163.com
 * @version  
 * @since JDK 1.7
 * 
 * 数据版本通用规则草案。
 * version:0.1-SNAPSHOT
 * 第一个0 表示大版本号    （当发布过正式版后，该数值会自增1。）
 * 第一个1 表示小版本号    （每次增加快照版本，该数值会自增1。）
 * 0.1-SNAPSHOT 快照 （表示新记录，从未做发布处理。）
 * 1.1-RELEASE 稳定      （已经发布过的历史版本，当前未启用。）
 * 1.1-GA 正式发布        （已经发布，当前启用版本。）
 */
public class VersionFactory {
	/**　快照版本  */
	public static final String SNAPSHOT = "SNAPSHOT";
	/**　稳定版本  */
	public static final String RELEASE = "RELEASE";
	/**　正式版本  */
	public static final String GA = "GA ";
	/**　默认初始值  */
	public static final String DEFAULT_NUMBER = "0.1";
	/**　版本数值分割符  */
	public static final String NUMBER_SRPARATOR = ".";
	/**　版本状态分割符  */
	public static final String STATE_SRPARATOR = "-";
	
	/**
	 * @param version 原始版本号  比如 0.1-SNAPSHOT
	 * @param versionState 升级规格 GA
	 * @return 1.1-GA
	 */
	public static String updateVersion(String version , String versionState){
		Integer big_number = Integer
								.valueOf(version.substring(0,version.indexOf(NUMBER_SRPARATOR)));
		Integer small_number = Integer
								.valueOf(version.substring(version.indexOf(NUMBER_SRPARATOR)+1,version.indexOf(STATE_SRPARATOR)));
		if(GA.equals(versionState)){
			small_number++;
			if(small_number >= 10){
				big_number++;
				small_number = 0;
			}
		}else if(SNAPSHOT.equals(versionState)||RELEASE.equals(versionState)){
			small_number++;
		}
		return new StringBuffer()
					.append(big_number)
					.append(NUMBER_SRPARATOR)
					.append(small_number)
					.append(STATE_SRPARATOR)
					.append(versionState)
					.toString();
	}
	
	public static String createGaVersion(String version){
		return updateVersion(version,GA);
	}
	
	/**获取默认版本号 */
	public static String createVersion(){
		return DEFAULT_NUMBER+STATE_SRPARATOR+GA;
	}
	
	public static String createSnapshotVersion(String version){
		return updateVersion(version,SNAPSHOT);
	}
	
	public static String updateReleaseVersion(String version){
		return updateVersion(version,RELEASE);
	}
	
	public static void main(String[] args) {
		System.out.println(createGaVersion(createVersion()));
	}
	
}
